Java、数据库、OS死锁小结

本文探讨了死锁的基本概念,包括其独占和成环的性质,并详细解释了数据库中的四种异常现象及隔离级别。重点分析了Java中死锁产生的原因以及数据库中的死锁情景,提出了相应的解决方案,如逻辑调整和乐观锁的应用。
摘要由CSDN通过智能技术生成

死锁最简单的场景就是,A拿着a资源,必须等拿到b资源后才释放a资源;B拿着b资源,必须等拿到a资源后才释放b资源。

 

所以死锁的性质

一、独占(像synchornized和ReentrantLock一样)

1.同时只能一个人用

2.后面的人只能排队

3.不可把使用者赶出去

二、成环

 

Java产生死锁的根本原因也是如此:在获取一个锁的同时,又去申请另外的锁

 

谈论数据库前,先讲一些数据库基础知识

数据库的4种异常现象及隔离级别

1.脏读。正常情况下会以为这样的操作是脏读——事务1先读了A行,事务2然后改了,所以拿到了一个脏数据。

当然不是这样理解的。这是对事务没有理解到位,事务是一个时间段性质的东西,比如在这个事务的时间段内修改了数据库,虽然你没有提交,但是对数据库的改变确实是真实发生的。但是由于你的事务还未提交,你的事务随时有回滚的可能,事务记录了你的操作,如果你回滚了,那么数据库就会被恢复到之前的样子。

所以我们可以知道,如果你修改了数据库的东西,但是你这个事务又没有提交。如果这个时候有人读了,就很危险了,因为你是有可能会回滚这个事务的,一旦你回滚了这个事务,那就是脏读了。

2.怎么解决呢?我们规定,在写的事务未提交之前,我们不能读。

可是这样还是有安全隐患,假如我们一个事务,先读了一次,然后另一个事务过来修改了一个值,我们原来的事务再次读了一次,惊讶地发现上次读的值和这一次读的值不一样了。

3.怎么解决呢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值